home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
dpmigcc5.zip
/
RSX
/
SOURCE
/
LOADER
/
LOADER.H
< prev
next >
Wrap
C/C++ Source or Header
|
1994-12-12
|
4KB
|
130 lines
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
/* descriptor fields */
#define ACCESS_BIT 1
#define READ_BIT 2
#define WRITE_BIT 2
#define CONFIRMING_BIT 4
#define EXPAND_BIT 4
#define CODE_BIT 8
#define SEGMENT_BIT 16
#define PRESENT_BIT 128
#define AVL_BIT 16
#define DEFAULT_BIT 64
#define BIG_BIT 64
#define GRANULAR_BIT 128
#define DPL_MASK 96
#define TYPE_MASK 15
#define LIMIT_HI_MASK 15
#define APP_CODE_SEL 250 /* dpl=3 , read */
#define APP_DATA_SEL 242 /* dpl=3 ,write */
#define TYPE_CODE 10
#define TYPE_CONFIRM_CODE 14
#define TYPE_DATA 2
#define TYPE_EXPAND_DATA 6
#define TYPE_286TSS 1
#define TYPE_LDT 2
#define TYPE_BUSY286TSS 3
#define TYPE_286CALLGATE 4
#define TYPE_TASKGATE 5
#define TYPE_286INTGATE 6
#define TYPE_286TRAPGATE 7
#define TYPE_386TSS 9
#define TYPE_BUSY386TSS 11
#define TYPE_386CALLGATE 12
#define TYPE_386INTGATE 14
#define TYPE_386TRAPGATE 15
/* *************************************************************** */
int AllocLDT(WORD anzahl,WORD *sel);
int FreeLDT(WORD);
WORD SelInc(void);
int SetBaseAddress(WORD sel,DWORD address);
int SetLimit(WORD sel,DWORD limit);
int SetAccess(WORD sel,BYTE access,BYTE extaccess);
WORD GetCS(void);
WORD GetDS(void);
int GetDpmiEntryPoint(DWORD *entry,WORD *para,WORD *flags,WORD *v,BYTE *cpu);
int GetDpmiHostParagraph(WORD paragr);
int DpmiEnterProtectedMode(DWORD entry,WORD mode,WORD hostsegm);
int DosReallocParagraph(int segm, int paragr);
#define DosGetParagraph(x) GetDpmiHostParagraph(x)
int LockLinRegion(DWORD size,DWORD address);
/* *************************************************************** */
void dos_puts(char *name);
int dos_open(char *name, int mode);
int dos_close(int handle);
int dos_read_far(int handle, void far *buffer, int bytes);
int dos_read(int handle, void * buffer, int bytes);
long dos_lseek(int handle, long pos, int orgin);
void far_memcpy(void far *, void far *, int);
void far_bzero(void far *, int);
void jmp_to_user(void);
int npx_installed(void);
/* *************************************************************** */
#define N_MAGIC(exec) ((exec).a_info & 0xffff)
#define OMAGIC 0x107
#define NMAGIC 0x108
#define ZMAGIC 0x10B
#define SEGMENT_SIZE 0x10000L
#define N_TXTADDR(x) SEGMENT_SIZE
#define N_DATADDR(x) (SEGMENT_SIZE + ((N_TXTADDR(x)+(x).a_text-1) & ~(SEGMENT_SIZE-1)))
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
#define _N_HDROFF(x) (1024 - sizeof (struct exec))
#define N_TXTOFF(x) (_N_HDROFF((x)) + sizeof (struct exec))
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
typedef struct exec {
DWORD a_info; /* Use macros N_MAGIC, etc for access */
DWORD a_text; /* length of text, in bytes */
DWORD a_data; /* length of data, in bytes */
DWORD a_bss; /* length of uninitialized data area for file, in bytes */
DWORD a_syms; /* length of symbol table data in file, in bytes */
DWORD a_entry; /* start address */
DWORD a_trsize; /* length of relocation info for text, in bytes */
DWORD a_drsize; /* length of relocation info for data, in bytes */
} GNUOUT ;
struct exe_hdr {
WORD signatur;
WORD low;
WORD high;
WORD reloc;
WORD hdr_para;
};
#ifndef NULL
#define NULL (void *)0
#endif
/* DOSOPEN : AH = 0x3d , AL = mode , DS:DX name */
/* bits 0-2 */
#define DO_RDONLY 0x00
#define DO_WRONLY 0x01
#define DO_RDWR 0x02
/* bits 4-6 */
#define DO_COMPAT 0x00
#define DO_DENYRW 0x10
#define DO_DENYWR 0x20
#define DO_DENYRD 0x30
#define DO_DENYNO 0x40
/* bit 7 */
#define DO_INHERIT 0x80
#define SEEK_SET 0